/**
 * Copyright (C) 2018-2022
 * All rights reserved, Designed By www.yixiang.co
 * 注意：
 * 本软件为www.yixiang.co开发研制
 */
package co.yixiang.modules.adopt.entity.domain;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import co.yixiang.common.annotation.Sensitive;
import co.yixiang.common.annotation.SensitiveStrategy;
import co.yixiang.common.domain.BaseDomain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @author hupeng
 * @date 2020-05-12
 */


@TableName("yx_adopt_product")
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
public class YxAdoptProduct extends BaseDomain {

    /** 商品id */
    @TableId
    private Long id;
    /** 商品图片 */
    @Sensitive
    @NotBlank(message = "请上传商品图片")
    private String image;
    /** 轮播图 */
    @Sensitive(strategy = SensitiveStrategy.BATCH_IMAGE)
    @NotBlank(message = "请上传商品轮播")
    private String sliderImage;
    /** 商品名称 */
    @NotBlank(message = "商品名称不能空")
    private String adoptName;
    /** 商品简介 */
    private String adoptInfo;
    /** 产品描述 */
    @NotBlank(message = "请填写商品详情")
    private String description;
    /** 关键字 */
    private String keyword;
    /** 产品条码（一维码） */
    private String barCode;
    /** 分类id */
    private String cateId;
    /** 商品价格 */
    @NotNull(message = "请输入商品价格")
    @DecimalMin(value = "0.00", message = "商品价格不在合法范围内")
    @DecimalMax(value = "99999999.99", message = "商品价格不在合法范围内")
    private BigDecimal price;
    /** 会员价格 */
    private BigDecimal vipPrice;
    /** 市场价 */
    @NotNull(message = "请输入市场价")
    @DecimalMin(value = "0.00", message = "市场价不在合法范围内")
    @DecimalMax(value = "99999999.99", message = "市场价不在合法范围内")
    private BigDecimal otPrice;
    /** 成本价 */
    @NotNull(message = "请输入成本价")
    @DecimalMin(value = "0.00", message = "成本价不在合法范围内")
    @DecimalMax(value = "99999999.99", message = "成本价不在合法范围内")
    private BigDecimal cost;
    /** 获得积分 */
    @DecimalMin(value = "0.00", message = "获得积分不在合法范围内")
    @DecimalMax(value = "99999999.99", message = "获得积分不在合法范围内")
    private BigDecimal giveIntegral;

    @ApiModelProperty(value = "重量")
    private Double weight;
    /** 邮费 */
    private BigDecimal postage;
    /** 单位名 */
    @NotBlank(message = "请填写单位")
    private String unitName;
    /** 排序 */
    private Integer sort;
    /** 销量 */
    private Integer sales;
    /** 虚拟销量 */
    private Integer ficti;
    /** 浏览量 */
    private Integer browse;
    /** 库存 */
    @NotNull(message = "请输入库存")
    @Min(message = "库存不能小于0", value = 1)
    private Integer stock;

    /** 状态（0：未上架，1：上架） */
    private Integer isShow;
    /** 是否热卖 */
    private Integer isHot;
    /** 是否优惠 */
    private Integer isBenefit;
    /** 是否精品 */
    private Integer isBest;
    /** 是否新品 */
    private Integer isNew;
    /** 是否包邮 */
    private Integer isPostage;
    /** 是否优品推荐 */
    private Integer isGood;


    /** 品种名称 */
    @NotBlank(message = "品种名称不能空")
    private String varietyName;
    /** 认养周期 /天 */
    private Integer period;
    /** 产品特点 */
    private String feature;
    /** 认养合同 */
    private String contract;
    /** 开始时间  */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date beginTime;
    /** 结束时间  */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endTime;
    /** 位置信息  */
    private String position;
    /** 位置信息  */
    private String positionStr;

    /** 地址  */
    private String addressPath;

    /** 详细地址  */
    private String addressDetail;

    @ApiModelProperty(value = "运费模板id,不需要运费模板时值是0", required = true)
    @NotNull(message = "运费模板不能为空，没有运费模板时，传值0")
    @Min(value = 0, message = "运费模板值不正确")
    private String templateId;




    /** 销售模式 */
    @ApiModelProperty(value = "销售模式", required = true)
    private String salesModel;

    @TableField(exist = false)
    private YxAdoptCategory adoptCategory;

    @TableField(exist = false)
    private Double distance;


    public void copy(YxAdoptProduct source) {
        BeanUtil.copyProperties(source, this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
